package metier;



import java.sql.ResultSet;
import java.sql.SQLException;


import java.util.ArrayList;
import java.util.List;


import DB.Request;
import bean.Utilisateur;

public class UtilisateurMetier {
	private static UtilisateurMetier singleton = new UtilisateurMetier();
	
	public static UtilisateurMetier getInstance(){
		return singleton;
	}
	
	public Utilisateur save(Utilisateur utilisateur){
		if(utilisateur != null){
			String query;
			if (utilisateur.getId_utilisateur() != null) {
				//UPDATE
				query = "UPDATE utilisateur SET login=?,mdp=?,nom=?,prenom=?,type1=?,type2=?,premiere_connexion=?,question_secrete=?,reponse=? WHERE id_utilisateur="+utilisateur.getId_utilisateur();
			} else {
				//INSERT
				query = "INSERT INTO utilisateur(login,mdp,nom,prenom,type1,type2,premiere_connexion,question_secrete,reponse) VALUES (?,?,?,?,?,?,?,?,?)";
			}
			List<Object> param = new ArrayList<Object>();
			param.add(utilisateur.getLogin());
			param.add(utilisateur.getMdp());
			param.add(utilisateur.getNom());
			param.add(utilisateur.getPrenom());
			param.add(utilisateur.getType1());
			param.add(utilisateur.getType2());
			param.add(utilisateur.isPremiere_connexion());
			param.add(utilisateur.getQuestion_secrete());
			param.add(utilisateur.getReponse());
			Request.getInstance().executeUpdate(query, param);
		}
		if (utilisateur.getId_utilisateur() != null) {
			return getById(utilisateur.getId_utilisateur());
		} else {
			return getById(getLastId());
		}
	}
	
	public void delete(Utilisateur utilisateur){
		String query = "DELETE FROM utilisateur WHERE id_utilisateur=" + utilisateur.getId_utilisateur();
		Request.getInstance().executeUpdate(query);
	}
	
	public Utilisateur getById(Integer id){
		Utilisateur utilisateur = null;
		String query = "SELECT * FROM utilisateur WHERE id_utilisateur=" + id;
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				utilisateur = new Utilisateur(id, resultat.getString("login"), resultat.getString("mdp"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getString("type1"),  resultat.getString("type2"), resultat.getBoolean("premiere_connexion"), resultat.getString("question_secrete"), resultat.getString("reponse"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return utilisateur;
	}
	// Fait par Alexis le 27/01/2015
	// Recherche par le login
	public Utilisateur getByLogin(String login){
		Utilisateur utilisateur = null;
		String query = "SELECT * FROM utilisateur WHERE login= '"+login+"'";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next())
				utilisateur = new Utilisateur(resultat.getInt("id_utilisateur"), login , resultat.getString("mdp"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getString("type1"),  resultat.getString("type2"), resultat.getBoolean("premiere_connexion"), resultat.getString("question_secrete"), resultat.getString("reponse"));
			}catch (SQLException e) {
				e.printStackTrace();
			}
		return utilisateur;
	}
	public List<Utilisateur> getAll(){
		List<Utilisateur> utilisateurs = new ArrayList<Utilisateur>();
		String query = "SELECT * FROM utilisateur";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				Utilisateur utilisateur = new Utilisateur(resultat.getInt("id_utilisateur"), resultat.getString("login"), resultat.getString("mdp"), resultat.getString("nom"), resultat.getString("prenom"), resultat.getString("type1"),  resultat.getString("type2"), resultat.getBoolean("premiere_connexion"), resultat.getString("question_secrete"), resultat.getString("reponse"));
				utilisateurs.add(utilisateur);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return utilisateurs;
	}

	
	private Integer getLastId(){
		Integer result = null;
		String query = "SELECT max(id_utilisateur) AS id_utilisateur FROM utilisateur";
		ResultSet resultat = Request.getInstance().executeQuery(query);
		try {
			while(resultat.next()){
				result = resultat.getInt("id_utilisateur");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return result;
	}

}
